<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>demo</title>
</head>
<body>
    <h1>拓展运算符</h1>
    <p>扩展运算符(spread)是三个点(...)。它好比 rest 参数的逆运算,将一个数组转为用逗号分隔的参数序列。</p>
    <p>主要用途:</p>
    <ul>
        <li>可以展开数组,将数组元素展开为独立的参数</li>
        <li>可以复制数组,创建一个新的数组副本</li>  
        <li>可以合并数组,将多个数组合并成一个新数组</li>
        <li>可以将类数组对象转为真正的数组</li>
    </ul>
    <p>示例代码见下方 script 标签中的演示。</p>
    <p>apply 方法的使用:</p>
    <ul>
        <li>apply() 方法调用一个具有给定this值的函数，以及以一个数组的形式提供的参数</li>
        <li>使用拓展运算符可以替代 apply 方法</li>
        <li>下面的示例展示了如何使用拓展运算符替代 apply 方法来获取数组中的最大值</li>
    </ul>
</body>
<script type="text/javascript">
    // 拓展运算符
    let arr = [1, 2, 3];
    let arr2 = [...arr];
    console.log(arr2);

    // 使用 apply 方法
    let numbers = [5, 6, 4, 2, 3];
    let max = Math.max.apply(null, numbers); 
    console.log('使用apply方法获取最大值:', max);

    // 使用拓展运算符 - 更简洁的写法
    let max2 = Math.max(...numbers);
    console.log('使用拓展运算符获取最大值:', max2);

    // apply方法的其他用法
    let array = ['a', 'b'];
    let elements = [0, 1, 2];
    array.push.apply(array, elements);
    console.log('使用apply合并数组:', array);

    // 使用拓展运算符的等价写法
    let array2 = ['a', 'b'];
    array2.push(...elements);
    console.log('使用拓展运算符合并数组:', array2);
</script>
</html>
</body>
<script type="text/javascript">
    // 拓展运算符
    let arr = [1, 2, 3];
    let arr2 = [...arr];
    console.log(arr2);
</script>
</html>